package view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.UnknownHostException;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;

import client.Conversa;
import info.clearthought.layout.TableLayout;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import model.Contato;
import model.RecebivelPorConversa;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class JanelaDeConversa extends javax.swing.JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	* Auto-generated main method to display this JFrame
	*/
	private Conversa conversa;
	private JTextArea areaMensagens;
	private JButton botaoEnviar;
	private JButton botaoLimpar;
	private JScrollPane scrollMensagens;
	private JButton botaoArquivo;
	private JTextArea areaEnviaMensagem;

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JanelaDeConversa inst = new JanelaDeConversa();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	private JanelaDeConversa() {
		super();
		initGUI();
	}
	
	public JanelaDeConversa(Contato contatoDestino, String ipDestino) {
		super();
		conversa = new Conversa(contatoDestino, ipDestino, this); 
		initGUI();
		
	}
	
	public JanelaDeConversa(RecebivelPorConversa mensagem) {
		super();
		conversa = new Conversa(mensagem, this); 
		initGUI();
		
	}
	
	
	
	private void initGUI() {
		try {
			this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
			TableLayout thisLayout = new TableLayout(new double[][] {{342.0, 76.0, TableLayout.FILL, TableLayout.FILL}, {254.0, 15.0, 33.0, TableLayout.FILL}});
			thisLayout.setHGap(5);
			thisLayout.setVGap(5);
			getContentPane().setLayout(thisLayout);
			this.setTitle("iMSN - " + conversa.getContatoDestino().getNome());
			{
				areaMensagens = new JTextArea();
				getContentPane().add(areaMensagens, "0, 0, 3, 0");
				{
					scrollMensagens = new JScrollPane();
					areaMensagens.add(scrollMensagens);
					areaMensagens.setEditable(false);
				}
			}
			{
				areaEnviaMensagem = new JTextArea();
				getContentPane().add(areaEnviaMensagem, "0, 2, 1, 3");
				areaEnviaMensagem.setText("jTextArea1");
			}
			{
				botaoEnviar = new JButton();
				getContentPane().add(botaoEnviar, "2, 2");
				botaoEnviar.setText("Enviar");
				botaoEnviar.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent arg0) {
						// TODO Auto-generated method stub
						areaMensagens.append(areaEnviaMensagem.getText());
						enviaMensagem(areaEnviaMensagem.getText(), Conversa.MENSAGEM_DE_TEXTO);
						areaEnviaMensagem.setText("");
					}
				});
			}
			{
				botaoArquivo = new JButton();
				getContentPane().add(botaoArquivo, "2, 3");
				botaoArquivo.setText("Arquivo");
				botaoArquivo.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent arg0) {
						// TODO Auto-generated method stub
						String caminhoArquivo = selecionaCaminhoDoArquivo(); 
						if ((caminhoArquivo != null ) && (!caminhoArquivo.equals(""))){
							areaMensagens.append("Arquivo: " + caminhoArquivo + " enviado.");
							enviaMensagem(caminhoArquivo, Conversa.MENSAGEM_DE_ARQUIVO);							
						}
						else{
							JOptionPane.showConfirmDialog(JanelaDeConversa.this, "Selecione um arquivo.", 
									"Erro!", JOptionPane.OK_OPTION, JOptionPane.ERROR_MESSAGE);
						}
					}
				});

				
			}
			{
				botaoLimpar = new JButton();
				getContentPane().add(botaoLimpar, "3, 2, 3, 3");
				botaoLimpar.setText("Limpar");
				botaoLimpar.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent e) {
						// TODO Auto-generated method stub
						areaEnviaMensagem.setText("");
					}
				});
			}
			
			this.addWindowListener(new WindowAdapter() {
				
				@Override
				public void windowClosing(WindowEvent e) {
					// TODO Auto-generated method stub
					super.windowClosing(e);
					fechaJanela();
				}
				
			});
			
			pack();
			this.setSize(633, 430);
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}

	public void setConversa(Conversa conversa) {
		this.conversa = conversa;
	}

	public Conversa getConversa() {
		return conversa;
	}
	
	public void atualizaConversas(boolean tipo) {
		
		String msg = conversa.getContatoDestino().getNome();
		if (tipo == Conversa.MENSAGEM_DE_TEXTO){
			msg = " escreveu: " + conversa.getConteudoTextoRecebido();
		}
		else{
			msg += " enviou: " + conversa.getConteudoArquivoRecebido() + " com sucesso!";
		}
		
		
	}

	
	private void enviaMensagem(String str, boolean tipo){
		
		if (tipo == Conversa.MENSAGEM_DE_ARQUIVO)
			enviaMensagem("Arquivo: " + str + " enviado.", Conversa.MENSAGEM_DE_TEXTO);
		
		try {
			conversa.enviaMensagem(str, tipo);
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("Erro ao enviar arquivo!");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private String selecionaCaminhoDoArquivo(){
		return javax.swing.JOptionPane.showInputDialog("Digite o caminho onde o arquivo se localiza:");
	}	
	
	private void fechaJanela(){
		int resposta = 0;
		resposta = JOptionPane.showConfirmDialog(JanelaDeConversa.this, "Deseja realmente fechar esta conversa?", 
				"Sair da Conversa", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
		
		if (resposta == JOptionPane.YES_OPTION){
			JanelaDeConversa.this.setVisible(false);
				this.setVisible(false);
		}
	}


}
